package com.example.javascaffold.annotation;


import com.example.javascaffold.aspect.PageAspect;

import java.lang.annotation.*;


/**
 * <p><strong>自动分页</strong></p>
 * <p>
 *     用在Impl实现类的方法上 <br>
 * </p>
 * <li>
 * <p>
 *     <strong>示例1: 默认page1 limit5 @PageQuery</strong> <br>
 *     结果: "result": {返回的Object} <br>
 * </p>
 * </li>
 * <li>
 * <p>
 *     <strong>示例2: 指定page3 limit2 <br> @PageQuery(page = 3, limit = 2)</strong> <br>
 *     结果: 按照方法返回的结果返回(不会自动帮你打包为result) <br>
 * </p>
 * </li>
 * <li>
 * 结果: <br>
 *      "data": { <br>
 *          &nbsp&nbsp "result": {"返回的Object": x}, <br>
 *          &nbsp&nbsp "total": 14, <br>
 *          &nbsp&nbsp "prePage": 0, <br>
 *          &nbsp&nbsp "nextPage": 2, <br>
 *          &nbsp&nbsp "limit": 5, <br>
 *          &nbsp&nbsp "page": 1 <br>
 *      }<br>
 * </li>
 * <li>
 * <p>
 *     <strong>ps: 方法上 有@PageQuery时  @InfoResult不生效</strong> <br>
 * </p>
 * </li>
 * @author song
 * @see PageAspect
 * @since 8:28 2021/8/11
 **/
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface PageQuery {
    /**
     * 需要处理的 Map 值
     */
    String params() default "params";

    /**
     * 返回的对象名称 默认是result 通过R.data(xxx)
     */
    String result() default "result";

    /**
     * 默认分页参数 -1会使用Constant中默认的值 在PageParamUtils时会处理
     */
    int page() default -1;

    /**
     * 默认分页参数 -1会使用Constant中默认的值 在PageParamUtils时会处理
     */
    int limit() default -1;

    /**
     * 是否限制使用 page()和limit指定的值
     */
    boolean fixed() default false;
}
